// jsdoc语法提示教程：https://ask.dcloud.net.cn/docs/#//ask.dcloud.net.cn/article/129
const global = uniCloud.importObject("global",{customUI:true});
const collectionName = "classify" ;
module.exports = {
	_before: function () { // 通用预处理器
	},
	/**
	 * 从数据库获取数据列表
	 * @param table {string} param1 要查询的主表
	 * @param where {string/object} 主表条件
	 * @param order {string} 主表排序
	 * @param field {string} 要查询的主表字段
	 * @param skip {int} 查询开始位置，为0则从头开始
	 * @param limit {int} 单次查询的条数
	 * @param collTable {string} 关联表名
	 * @param collTableField {string} 副标查询的字段
	 * @param collTableWhere{object/string} 副表查询条件
	 * @param collTableOrder {string} 副表排序
	 * @param collTableSkip {int} 副表查询开始位置
	 * @param collTableWhere {int} 副表查询条数
	 * @returns {object},数组在res.data中
	 */
	async getData(where={},order="",field=null,skip=0,limit=10,collTable=false,collTableField=null,collTableWhere={},collTableOrder="",collTableSkip=0,collTableLimit=5){
		try{
			const result = await global.getList(collectionName,where={},order,field,skip,limit,collTable,collTableField,collTableWhere,collTableOrder,collTableSkip,collTableLimit);
			return {code:200,message:'获取成功',result} ;
		}catch(error){
			// 返回结果
			return {message:'内部错误',error }
		}
	},
	/**
	 * 作用：获取单条数据
	 * @param table {string} param1 要查询的主表
	 * @param where {string/object} 主表条件
	 * @param field {string} 要查询的主表字段
	 * @param collTable {string} 关联表名
	 * @param collTableField {string} 副标查询的字段
	 * @param collTableIsGetOne {bool} 副标是否也查询单条
	 * @returns {object},数组在res.data中
	 */
	async getDataOne(where={},field,collTable=false,collTableField=null,collTableIsGetOne=true){
		try{
			const result = await global.getOne(collectionName,where,field,collTable,collTableField,collTableIsGetOne);
			return {code:200,message:'获取成功',result} ;
		}catch(error){
			// 返回结果
			return {message:'内部错误',error }
		}
	},
	/**
	 * 新增方法
	 * @param data 要插入的数据
	 * @returns {object} 返回classify表内容
	 */
	async addData(data) {
		try{
			data.sort = parseInt(data.sort) ;
			data.item_number = parseInt(data.item_number) ;
			data.number = parseInt(data.number) ;
			const result = await global.addData(collectionName,data);
			return {code:200,message:'添加成功',result} ;
		}catch(error){
			// 返回结果
			return {message:'内部错误',error }
		}
	},
	/**
	 * 修改数据
	 * @param data 要修改的数据
	 * @param where  修改条件
	 * @returns {object} 返回classify表内容
	 */
	async editData(data,where) {
		// 参数校验，如无参数则不需要
		if (!data,!where) return {errCode: 'PARAM_IS_NULL',errMsg: '参数不能为空'} ;
		const db = uniCloud.database() ;
		const collectionName = "classify" ;
		try{
			delete data._id ; // 删除_id
			data.sort = parseInt(data.sort) ;
			data.item_number = parseInt(data.item_number) ;
			data.number = parseInt(data.number) ;
			const result = await db.collection(collectionName).where(where).update(data) ;
			// 返回结果
			return {code:200,message:"修改成功",result:result}
		}catch(error){
			// 返回结果
			return {message:'内部错误',error }
		}
	},
	/**
	 * 删除Classify数据
	 * @param uid String 数据的_id 
	 * @param images String[] 要删除的图片数组字符串 
	 * @returns {object} 返回classify删除成功
	 */
	async deleteData(uid,images) {
		// 参数校验，如无参数则不需要
		if (!uid) return {errCode: 'PARAM_IS_NULL',errMsg: '缺少参数'} ;
		const db = uniCloud.databaseForJQL() ;
		try{
			if(images.length > 0) uniCloud.deleteFile({ fileList:images}).finally(()=>{ } ) ;
			const data = await db.collection(collectionName).doc(uid).remove() ;
			// 返回结果
			return { code:200,message:"删除成功",result:data }
		}catch(error){
			// 返回结果
			return {message:'内部错误',error }
		}
	},
	/**
	 *作用：查询出分类列表并存入redis
	 */
	async getDataAndInsertRedis(type){
		var classify = uniCloud.importObject('classify');
		const redis = uniCloud.redis();
		var data = await redis.get(type+'classify-data');
		if(!data || !data[0] || data[0]._id){
			var where = {
				index_show:1,
				is_show:1,
				type:type
			}
			var result = await classify.get(where);
			var data = result.result.data;
			var setRedis = await redis.set(type+'classify-data',JSON.stringify(data),'EX',86400);//缓存一天，除非手动删除
			return {
				code:200,
				message:"获取成功",
				result:data
			};
		}else{
			return {
				code:200,
				message:"获取成功",
				result:JSON.parse(data)
			};
		}
		
	},
	/**
	 * 作用：获取数据
	 * @param where:条件，getOne:是否查询单条数据
	 * @return:array,查询后的结果
	 */
	async get(where={},getOne=false) {
		// 参数校验，如无参数则不需要
		if (false) return {errCode: 'PARAM_IS_NULL',errMsg: '参数不能为空'};
		const db = uniCloud.database() ;
		const collectionName = "classify";
		try{
			const data = await db.collection(collectionName).where(where).orderBy('sort','asc').get({getOne:getOne})
			// 返回结果
			return {
				code:200,
				message:"获取成功",
				result:data
			}
		}catch(error){
			// 返回结果
			return {
				message:'内部错误',
				error 
			}
		}
	}
}
